home *** CD-ROM | disk | FTP | other *** search
- //---------------------------------------------------------------------------
- #include <vcl\vcl.h>
- #pragma hdrstop
-
- #include "hangy.h"
- //---------------------------------------------------------------------------
- #pragma resource "*.dfm"
-
- const String Pfad = "c:\\cpp\\buch\\";
-
- class THangMan : public TObject
- {
- private:
- int OK;
- int Nr;
- int Laenge;
- int Max;
- bool Fertig;
- bool Mimik;
- String RateText;
- String Geraten;
- TStringList *Liste;
- void __fastcall SetZero(void);
- public:
- virtual void __fastcall ClearHangMan(void);
- virtual void __fastcall DrawHangMan(void);
- virtual void __fastcall ShowHangMan(void);
- virtual void __fastcall GetKey (char Key);
- virtual void __fastcall GetList (String Datei);
- __fastcall THangMan(String Datei);
- virtual __fastcall ~THangMan(void);
- };
-
- THangMan *HangMan;
- TForm1 *Form1;
-
- //---------------------------------------------------------------------------
- __fastcall THangMan::THangMan (String Datei)
- {
- Liste = new TStringList;
- SetZero ();
- Mimik = true;
- try
- {
- Liste->LoadFromFile (Datei);
- Max = Liste->Count;
- }
- catch (...)
- {
- Form1->Panel1->Caption = "Ohne Worte!";
- Max = 0;
- }
- }
- //---------------------------------------------------------------------------
- __fastcall THangMan::~THangMan(void)
- {
- Liste->Clear ();
- delete Liste;
- }
- //---------------------------------------------------------------------------
- void __fastcall THangMan::SetZero (void)
- {
- Geraten = "";
- Nr = 0;
- OK = 0;
- Fertig = false;
- Form1->Image1->Canvas->Brush->Color = clGray;
- Form1->Image1->Canvas->Rectangle(0,0,140,200);
- }
- //---------------------------------------------------------------------------
- void __fastcall THangMan::ClearHangMan (void)
- {
- SetZero ();
- if (Max > 0) RateText = UpperCase(Liste->Strings[random(Max)]);
- else RateText = UpperCase("Zehplusplus");
- Laenge = RateText.Length();
- for (int i=0; i<Laenge; i++)
- {
- Geraten = Geraten + "?";
- }
- Form1->Panel1->Caption = Geraten;
- Form1->Label1->Caption = "Buchstaben eintippen!";
- }
- //---------------------------------------------------------------------------
- void __fastcall THangMan::ShowHangMan (void)
- {
- int Mix = 10;
- if (Mimik) Mix = 11;
- Nr = 0;
- while (Nr < Mix) {Nr++; DrawHangMan ();}
- Form1->Panel1->Caption = RateText;
- if (RateText.IsEmpty())
- Form1->Label1->Caption = "Da ist kein Wort";
- else
- Form1->Label1->Caption = "ist das Wort";
- Mimik = !Mimik;
- }
- //---------------------------------------------------------------------------
- void __fastcall THangMan::DrawHangMan (void)
- {
- Form1->Image1->Canvas->Pen->Width = 3;
- Form1->Image1->Canvas->Brush->Color = clSilver;
- switch (Nr)
- {
- case 1:
- Form1->Image1->Canvas->MoveTo (30,10);
- Form1->Image1->Canvas->LineTo (30,200);
- break;
- case 2:
- Form1->Image1->Canvas->MoveTo (30,10);
- Form1->Image1->Canvas->LineTo (95,10);
- break;
- case 3:
- Form1->Image1->Canvas->MoveTo (95,10);
- Form1->Image1->Canvas->LineTo (95,30);
- break;
- case 4:
- Form1->Image1->Canvas->Brush->Color = clRed;
- Form1->Image1->Canvas->Ellipse (80,30,110,65);
- break;
- case 5:
- Form1->Image1->Canvas->Ellipse (80,65,110,130);
- break;
- case 6:
- Form1->Image1->Canvas->MoveTo (90,130);
- Form1->Image1->Canvas->LineTo (90,170);
- break;
- case 7:
- Form1->Image1->Canvas->MoveTo (100,130);
- Form1->Image1->Canvas->LineTo (100,170);
- break;
- case 8:
- Form1->Image1->Canvas->Ellipse (75,165,95,175);
- break;
- case 9:
- Form1->Image1->Canvas->Ellipse (95,165,115,175);
- break;
- case 10:
- Form1->Image1->Canvas->Brush->Color = clAqua;
- Form1->Image1->Canvas->Ellipse (80,30,110,65);
- Form1->Image1->Canvas->Brush->Color = clYellow;
- Form1->Image1->Canvas->Ellipse (86,38,95,48);
- Form1->Image1->Canvas->Ellipse (95,38,104,48);
- Form1->Image1->Canvas->Arc (86,54,104,60,104,57,86,57);
- break;
- case 11:
- Form1->Image1->Canvas->Brush->Color = clFuchsia;
- Form1->Image1->Canvas->Ellipse (80,30,110,65);
- Form1->Image1->Canvas->Brush->Color = clLime;
- Form1->Image1->Canvas->Ellipse (86,38,95,48);
- Form1->Image1->Canvas->Ellipse (95,38,104,48);
- Form1->Image1->Canvas->Arc (86,45,104,60,86,53,104,53);
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall THangMan::GetKey (char Key)
- {
- String Taste = UpperCase(Key);
- bool Enthalten = false;
-
- if (!Fertig)
- {
- // Jeden Buchstaben einzeln ⁿberprⁿfen
- for (int i=1; i<=Laenge; i++)
- {
- if (Taste == RateText.SubString(i,1))
- {
- if (Taste != Geraten.SubString(i,1))
- {
- OK++;
- Geraten[i] = Key;
- Geraten = UpperCase(Geraten);
- }
- Enthalten = true;
- }
- }
- // Wenn Key enthalten, anzeigen
- if (Enthalten)
- Form1->Panel1->Caption = Geraten;
- // sonst Hangman weiterzeichnen
- else
- {
- Nr++;
- if (Nr < 11) DrawHangMan ();
- }
- // Wenn alle Buchstaben geraten, OK
- if ((OK >= Laenge) && (Nr < 10))
- {
- if (RateText.IsEmpty())
- Form1->Label1->Caption = "Klick auf NEU!";
- else
- Form1->Label1->Caption = "OK";
- SetZero ();
- Fertig = true;
- Form1->Image1->Picture->LoadFromFile ("HangMan.bmp");
- }
- // Wenn Hangman vollstΣndig, TOT
- else if ((Nr >= 10) && (!Fertig))
- {
- Form1->Panel1->Caption = RateText;
- Form1->Label1->Caption = "TOT";
- }
- }
- }
- //---------------------------------------------------------------------------
- void __fastcall THangMan::GetList (String Datei)
- {
- SetZero ();
- try
- {
- Liste->LoadFromFile (Datei);
- Max = Liste->Count;
- }
- catch (...)
- {
- Form1->Panel1->Caption = "Ohne Worte!";
- Max = 0;
- }
- }
- //---------------------------------------------------------------------------
- __fastcall TForm1::TForm1(TComponent* Owner)
- : TForm(Owner)
- {
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormCreate(TObject *Sender)
- {
- randomize ();
- HangMan = new THangMan (Pfad+"HangMan.txt");
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
- {
- delete HangMan;
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::NewButtonClick(TObject *Sender)
- {
- HangMan->ClearHangMan ();
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::ReadyButtonClick(TObject *Sender)
- {
- Form1->Image1->Canvas->Brush->Color = clGray;
- Form1->Image1->Canvas->Rectangle(0,0,140,200);
- HangMan->ShowHangMan ();
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
- {
- HangMan->GetKey (Key);
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::Oeffnen1Click(TObject *Sender)
- {
- if (OpenDialog1->Execute())
- HangMan->GetList (OpenDialog1->FileName);
- }
- //---------------------------------------------------------------------------
- void __fastcall TForm1::Ende1Click(TObject *Sender)
- {
- Close ();
- }
- //---------------------------------------------------------------------------
-